In many modern computing applications a computer's central processing unit (CPU) is expected to carry out multiple tasks simultaneously. For example, in addition to the basic requirement of performing the operations required to execute user applications, the CPU is also required to carry out operations to support various services associated with peripherals, input/output operations, and network traffic. As the network operations, peripherals etc. become more capable, the amount of computing required to support them also increases, often placing great strain on the CPU. One example of service that requires a large amount of computing power is the TCP/IP communications protocols used to transport data across networks. TCP/IP processing consumes a large portion of the computing that the CPU must do to support network traffic.
One method used to ease the amount of computing the CPU must perform is to install dedicated processing systems (“processors”) that are used to take up some of the functions originally carried out by the CPU, which is referred to here as the host CPU. These accessory processors, or daughter processors, may be part of the same basic computer as the host CPU, or may be located on an external peripheral, a removable card, or on a device remote from the CPU. Frequently these accessory processors perform work related to the input/output operations of the peripheral devices which would otherwise be directly controlled by the host CPU, in which case such auxiliary processor may be called an I/O processor (IOP). In the case of TCP/IP processing, the accessory processor may be incorporated on a network interface card which in turn is connected to the host CPU via data buses. A similar arrangement is often carried out with video accelerator cards which contain dedicated accessory processors, with SCSI controllers such as those used to control hard disk drives, and with RAID controllers. When these arrangements are carried out, the host CPU is freed from having to execute all the functions necessary to operate the accessories or the network connections, and can devote more uninterrupted time to applications, in effect resulting in a higher processing speed available to applications.
Accessories that include a daughter processor typically also include memory for use by the daughter processor. Generally this memory takes the form of dynamic RAM (random access memory). At least a portion of that memory should be accessible by the host CPU, to facilitate communication between host CPU and daughter processor. However, other regions of the memory need not be accessed by the host CPU. A flexible scheme is thus needed to optimally partition the available RAM memory into appropriately sized regions with the desired attributes. Present schemes lack this flexibility, and sacrifice either performance or require mapping excessive memory to the host CPU.